package com.taoyun.utils;

import java.security.SecureRandom;
import java.util.Date;
import java.util.Random;

public class RandomCode {

    private static final String SYMBOLS = "0123456789";

    /**
     * 注：Math.random生成的是一般随机数，采用的是类似于统计学的随机数生成规则，其输出结果很容易预测，
     * 因此可能导致被攻击者击中。而SecureRandom是真随机数，采用的是类似于密码学的随机数生成规则，其输
     * 出结果较难预测，若想要预防被攻击者攻击，最好做到使攻击者根本无法，或不可能鉴别生成的随机值和真
     * 正的随机值。
     */

    private static final Random RANDOM = new SecureRandom();

    /**
     * 随机生成6位数的验证码
     * @return
     */
    public static String generateCode(){
        char[] nonceChars = new char[6];
        for (int i = 0; i < nonceChars.length; i++) {
            nonceChars[i] = SYMBOLS.charAt(RANDOM.nextInt(nonceChars.length));
        }
        return new String(nonceChars);
    }

    /**
     * 获取验证码提交时间和验证码发送时间的时间差
     * @param sendCodeDate 系统发送验证码的时间
     * @param submitCodeDate 系统接收到验证码的时间
     * @return 返回时间差，单位是秒
     */
   public static int getTimeDiff(Date sendCodeDate,Date submitCodeDate){
       return (int) (submitCodeDate.getTime()-sendCodeDate.getTime()) / 1000;
   }
}
